#include "cpu/exec/template-start.h"

#define instr mov

static void do_execute()
{
	if (ops_decoded.opcode == 0x1b7)         // movz  使用mov_rm2r_w    rm16 -> r32
	{ 
		reg_l(op_dest->reg) = op_src->val;
		//printf("op_src->val:%x\n",op_src->val);
		print_asm_template2();
	}
	else
	{
		OPERAND_W(op_dest, op_src->val);
		print_asm_template2();
	}
}

make_instr_helper(i2r)
make_instr_helper(i2rm)
make_instr_helper(r2rm)
make_instr_helper(rm2r)

make_helper(concat(mov_a2moffs_, SUFFIX))
{
	swaddr_t addr = instr_fetch(eip + 1, 4);
	MEM_W(addr, REG(R_EAX));

	print_asm("mov" str(SUFFIX) " %%%s,0x%x", REG_NAME(R_EAX), addr);
	return 5;
}

make_helper(concat(mov_moffs2a_, SUFFIX))
{
	swaddr_t addr = instr_fetch(eip + 1, 4);
	current_sreg = R_DS;
	REG(R_EAX) = MEM_R(addr);

	print_asm("mov" str(SUFFIX) " 0x%x,%%%s", addr, REG_NAME(R_EAX));
	return 5;
}
#if DATA_BYTE == 2
make_helper(mov_sreg2rm) {
  uint8_t modrm = instr_fetch(eip + 1, 1);
  uint8_t sreg_num = ((modrm >> 3) & 7);
  uint8_t reg_num = (modrm & 7);
  cpu.sreg[sreg_num].selector = reg_w(reg_num);
  Sreg_Descriptor serg;
  sreg_desc = &serg;
  sreg_load(sreg_num);
  print_asm("mov %s SREG[%u]", REG_NAME(reg_num), sreg_num);
  return 2;
}
#endif
#include "cpu/exec/template-end.h"
